package com.stedu.mall.userservice.service;

import com.stedu.mall.common.bean.Addr;
import com.stedu.mall.common.exception.SteduException;
import com.stedu.mall.common.service.AddrService;
import com.stedu.mall.userservice.mapper.AddrMappre;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

@DubboService
public class AddrServiceImpl implements AddrService {
    @Autowired
    private AddrMappre addrMappre;

    @Override
    public int insert(Addr addr) {
        addr.setStatus(0);
        return addrMappre.insert(addr);
    }

    @Override
    public int delete(Integer id, Integer userId) throws SteduException {
        //判断这个地址是否存在
        Addr addr = addrMappre.selectById(id);
        if (addr == null) {
            throw new SteduException("该地址不存在， 无法删除~~");
        }
        //判断这个地址是否属于当前用户
        if (!addr.getUserId().equals(userId)) {
            throw new SteduException("该地址属于其他用户，无法删除");
        }
        return addrMappre.delete(id);
    }

    @Override
    public int update(Addr addr, Integer userId) throws SteduException {
        //判断这个地址是否存在
        Addr a = addrMappre.selectById(addr.getId());
        if (a == null) {
            throw new SteduException("该地址不存在， 无法删除~~");
        }
        //判断这个地址是否属于当前用户
        if (!a.getUserId().equals(userId)) {
            throw new SteduException("该地址属于其他用户，无法删除");
        }
        /*
         * 设置为默认地址的处理 -- 如果将某个地址设置为默认地址
         * 将之前默认地址设置为普通地址
         * */
        if (Integer.valueOf(1).equals(addr.getStatus())) {
            //查出当前默认地址
            Addr condition = new Addr();
            condition.setStatus(1);
            List<Addr> addrList = addrMappre.selectByCondition(condition);
            //将当前默认地址设置为普通地址
            if (addrList.size() > 0) {
                //将当前默认地址设置为普通地址
                Addr a1 = new Addr();
                a1.setId(addrList.get(0).getId());
                a1.setStatus(0);

                addrMappre.update(a1);
            }
        }
        return addrMappre.update(addr);
    }

    @Override
    public List<Addr> selectByCondition(Addr condition) {
        return addrMappre.selectByCondition(condition);
    }

    @Override
    public Addr selectById(Integer id) {
        return addrMappre.selectById(id);
    }

}
